#-*- coding: utf8 -*-

from tutor.script import *
from tutor.plugin.maple import *

# meta information
meta(author       = 'Fábio Mendes',
     creationdate = datetime(2010, 10, 9),
     status       = 'testing',
     difficulty   = 'easy',
     time         = 10,
     itemtype     = 'test')

# seleciona pontos
u = M.u
r = M.combine(M.sqrt(oneof(1, 2, 3, 4, 6, 8) / M(2)))
func = oneof(M.sqrt(u), M.u)
func = M.unapply(func, u)
func_ex = func(x**2 + y**2)
func_r = func(M.r**2)

question('Converta a integral\n\n'
         '$$\\int_{#1}^{#2} dx \\int_{0}^{\\sqrt{#3-x^2}} dy\\ #4$$\n\n'
         'para coordenadas polares.', -r, r, r**2, func_ex)
multiplechoice()

intrt = '$\\int_{#1}^{#2} dr \\int_{#3}^{#4} d\\theta\\ #5$'
inttr = '$\\int_{#1}^{#2} d\\theta \\int_{#3}^{#4} dr\\ #5$'

# choice: (a)
choice(1, intrt, 0, r, 0, M.Pi, M.r * func(M.r**2))
explanation('Escolha correta!') 

# choice: (b)
choice(0.5, intrt, 0, r, 0, 2*M.Pi, M.r * func(M.r**2))
explanation('A integração é feita apenas sobre o semi-círculo superior.') 

# choice: (c)
choice(0.5, intrt, 0, r, 0, M.Pi, func(M.r**2))
explanation('Se esqueceu do Jacobiano.')

# choice: (d)
choice(0, intrt, 0, r, 0, 2*M.Pi, func(M.r**2))
explanation('A integração é feita apenas sobre o semi-círculo superior.'
            'Também se esqueceu do Jacobiano.')

# choice: (f)
choice(0, intrt, -r, r, 0, M.Pi, M.r * func(M.r**2))
explanation('Não alterou os limites de integração para coordenadas polares.'
            'Também se esqueceu do Jacobiano.')

question('Calcule o valor desta integral')
multiplechoice()

# choice: (a)
mrange = M('`..`')
res = M.Pi * M.int(func_r * M.r, M.r==mrange(0, r))
res = M.simplify(res)
choice_eq(1, res)
explanation('Escolha correta!') 

# choice: (b)
res = M.Pi * M.int(func_r * M.r, M.r==mrange(-r, r))
res = M.simplify(res)
choice_eq(0, 2*res)
explanation('Provavelmente utilizou um limite negativo para $r$.') 

# choice: (c)
res = M.Pi * M.int(func_r, M.r==mrange(0, r))
choice_eq(0, res)
explanation('Se esqueceu do Jacobiano.')

# choice: (d)
res = M.Pi * M.int(func_r, M.r==mrange(-r, r))
choice_eq(0, res)
explanation('Se esqueceu do Jacobiano.')

end()